import axios from 'axios'

const server = axios.create({
	baseURL: 'http://127.0.0.1:8080', // 确保这里只包含你的后端服务器地址和端口
	timeout: 1000,
	headers: {'X-Custom-Header': 'foobar'}
})

// 添加请求拦截器
server.interceptors.request.use(config => {
	// 确保请求参数是一个对象
	if (config.params && typeof config.params !== 'object') {
		config.params = {};
	}
	
	if (config.data && typeof config.data !== 'object') {
		config.data = {};
	}

	// 如果需要发送 FormData
	if (config.headers['Content-Type'] === 'multipart/form-data') {
		const formData = new FormData();
		Object.keys(config.data || {}).forEach(key => {
			formData.append(key, config.data[key]);
		});
		config.data = formData;
	}

	// 设置 token（如果需要的话）
	// const token = localStorage.getItem('token');
	// if (token) {
	// 	config.headers['Authorization'] = `Bearer ${token}`;
	// }

	return config;
}, error => {
	return Promise.reject(error);
});

// 添加响应拦截器
server.interceptors.response.use(
	(response) => {
		// 如果响应成功，返回响应数据
		return response.data;
	},
	(error) => {
		// 更详细的错误处理
		let message = '系统异常请联系管理员';
		
		if (error.response) {
			// 服务器返回了错误状态码
			switch (error.response.status) {
				case 400:
					message = '请求错误';
					break;
				case 401:
					message = '未授权，请重新登录';
					break;
				case 403:
					message = '拒绝访问';
					break;
				case 404:
					message = '请求地址出错';
					break;
				case 408:
					message = '请求超时';
					break;
				case 500:
					message = '服务器内部错误';
					break;
				case 501:
					message = '服务未实现';
					break;
				case 502:
					message = '网关错误';
					break;
				case 503:
					message = '服务不可用';
					break;
				case 504:
					message = '网关超时';
					break;
				case 505:
					message = 'HTTP版本不受支持';
					break;
				default:
					message = `连接出错(${error.response.status})!`;
			}
		} else if (error.request) {
			// 请求已经发出，但没有收到响应
			message = '网络请求超时!';
		} else {
			// 请求配置发生的错误
			message = '请求失败!';
		}

		// 可以使用您项目中的提示组件来显示错误信息
		// 比如 Element UI 的 Message 组件
		// Message.error(message);

		console.error('请求错误:', message);
		return Promise.reject(error);
	}
);

export default server;